# ifndef MATHFUNC_H
# define MATHFUNC_H

# include <vector>
# include <algorithm>
# include <exception>

using namespace std;

namespace MathFunction
{
	class Prime
	{
	private:
		std::vector<int> primeList;
		int _upperBound;

	public:
		/// <summary>
		/// This constructor is a default constructor.
		/// </summary>
		Prime() {}
		/// <summary>
		/// This constructor is a will construct an instant with a prime list
		/// upper-bounded by the specified parameter.
		/// </summary>
		/// <param name = "upperBound"> Speicifies the upper bound of the prime
		/// list. </param>
		Prime(int upperBound);
		
		/// <summary>
		/// This function will return the entire prime list upper-bounded by
		/// the pre-defined upper bound.
		/// </summary>
		/// <returns> Entire prime list upper-bounded by the pre-defined upper
		/// bound. </returns>
		std::vector<int> GetPrimeList();
		/// <summary>
		/// This function will return all primes that less than a certain number.
		/// </summary>
		/// <param name = "bound"> Specifies the range of interest. A default
		/// lower bound of 0 is assumed. </param>
		/// <returns> All primes within range (0, bound]. </returns>
		std::vector<int> FindPrimeLessThan(int bound);
	};
}
# endif